package com.adingxiong.cft.thread;

/**
 * @ClassName TimerTask
 * @Description   定时器
 * @Author xiongchao
 * @Date 2020/12/7 13:35
 **/
public class MyTimerTask {

    private static void testTask (){
        System.out.println("开始注册定时器");
        for (int i = 0; i < 10; i++) {
            System.out.println(String.format("测试定时器%s预约任务" ,i));
        }
    }


    private static void run (){
        /*
        从这里可以看出  当我使用Timer定时器的时候  我们所需要延迟执行的任务执行完成之后,当前Timer对象并不会被销毁,而是一查
        处理等待的状态,这对服务器而言,消耗的很大的 所有我们需要手动关定时器
         */
       /*ScheduledExecutorService exe = new ScheduledThreadPoolExecutor(1 ,
                new BasicThreadFactory.Builder().namingPattern("example-shedule-pool-%d").daemon(true).build());
        exe.scheduleAtFixedRate(() ->{
            testTask();
        },50,100,TimeUnit.SECONDS);*/
       /* new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                testTask();
                this.cancel();
            }
        },1000*10);*/


        /**
         * 通过sleep的方式  方法延迟执行并自动关闭当前线程  性能损耗比较低
         */
        new Thread( () -> {
            try {
                Thread.sleep(1000*10);
                testTask();
            } catch (InterruptedException e) {
                System.out.println("异常关闭");
                e.printStackTrace();
            }
        }).start();
    }


    public static void main(String[] args) {
        run();
        System.out.println("主线程开始启动");
    }
}
